package cn.edu.lcu.cs.javaprogramming.oop.animal.deprecated;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

import java.time.LocalDate;
import java.time.temporal.ChronoUnit;

/**
 * <h3>对猴子建模，封装猴子的信息</h3>
 * <ul>
 * <li>属性候选项：名称，品种名称，出生日期，年龄，颜色，身高，体重，体长，性别，原产地等等</li>
 * <li>行为候选项：呼吸，进食，生育后代，哺育后代，行走，奔跑，爬树，等等</li>
 * </ul>
 *
 * <h3>英文术语</h3>
 * <ul>
 * <li>品种breed，身高height，体重weight，体长length，出生日期birthdate，性别gender，原产地origin</li>
 * <li>行走walk，奔跑run，爬树climb tree，进食eat，呼吸breath，生殖reproduce，哺育后代feed</li>
 * </ul>
 * <p>
 * 2022/3/2 22:18
 * </p>
 *
 * @Author ling
 */
// 使用Lombok插件，简化javabean的定义：使用注解，自动添加相关的方法。
@Getter
@Setter
@ToString
@Deprecated
public class Monkey {
    /**
     * 名字
     */
    private String name;

    /**
     * 出生日期 <br>
     * 这是一个Field字段，不是JavaBean的属性Property。 <br>
     * JavaBean的getter或者setter，去掉前缀get或set，剩下的部分首字母小写，就是JavaBean的属性名称。
     */
    private LocalDate birthDate;

    /**
     * 颜色
     */
    private String color;

    /**
     * 性别
     */
    private String gender;

    /**
     * 品种名称
     */
    private String breed;

    /**
     * 物种名称 <br>
     * 这是不可变更的量，所以声明为final类型。 <br>
     * Lombok @Setter 注解会忽略 final 字段，不为它生成setter方法。
     */
    private final String speciesName;

    /**
     * 原产地
     */
    private String origin;

    private double weight;

    private double height;

    private double length;

    public Monkey() {
        speciesName = "猴子";
    }

    public int getAge() {
        if (birthDate != null) {
            return (int) birthDate.until(LocalDate.now(), ChronoUnit.YEARS);
        } else {
            return -1;
        }
    }

    public void walk() {
        System.out.println(speciesName + "两条腿四条腿都会走路");
    }

    public void run() {
        System.out.println(speciesName + "在平地上跑得也挺快");
    }

    public void climbTree() {
        System.out.println(speciesName + "爬树666");
    }

    public void eat() {
        System.out.println(speciesName + "喜欢吃水果");
    }

    public void breath() {
        System.out.println(speciesName + "用肺呼吸");
    }

    /**
     * 生殖
     */
    public void reproduce() {
        System.out.println(speciesName + "是胎生的");
    }

    /**
     * 哺育后代
     */
    public void feed() {
        System.out.println(speciesName + "妈妈用乳汁哺育宝宝");
    }

}
